home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / include / net.h < prev    next >
C/C++ Source or Header  |  1992-08-26  |  9KB  |  279 lines

  1. /*
  2.  * net.h --
  3.  *
  4.  *    Declarations of the network library code.
  5.  *
  6.  * Copyright 1987 Regents of the University of California
  7.  * Permission to use, copy, modify, and distribute this
  8.  * software and its documentation for any purpose and without
  9.  * fee is hereby granted, provided that the above copyright
  10.  * notice appear in all copies.  The University of California
  11.  * makes no representations about the suitability of this
  12.  * software for any purpose.  It is provided "as is" without
  13.  * express or implied warranty.
  14.  *
  15.  * $Header: /sprite/src/lib/include/RCS/net.h,v 1.12 92/08/05 16:33:46 jhh Exp $ SPRITE (Berkeley)
  16.  */
  17.  
  18. #ifndef _NET_USER
  19. #define _NET_USER
  20.  
  21. #include "machparam.h"
  22. #include "netEther.h"
  23. #include "netInet.h"
  24. #include "netUltra.h"
  25. #include "netFDDI.h"
  26. #include "sprite.h"
  27.  
  28. /*
  29.  * Types of addresses.
  30.  */
  31.  
  32. typedef int Net_AddressType;
  33.  
  34. #define NET_ADDRESS_NONE    ((Net_AddressType) 0)    /* Invalid */
  35. #define NET_ADDRESS_ETHER    ((Net_AddressType) 1)    /* Ethernet. */
  36. #define NET_ADDRESS_ULTRA    ((Net_AddressType) 2)    /* UltraNet. */
  37. #define NET_ADDRESS_FDDI    ((Net_AddressType) 3)    /* FDDI. */
  38. #define NET_ADDRESS_INET    ((Net_AddressType) 4)    /* IP. */
  39.  
  40.  
  41.  
  42. /*
  43.  * A network address.  The "generic" field must be at least as large as
  44.  * any of the other fields.
  45.  */
  46.  
  47. typedef struct Net_Address {
  48.     Net_AddressType        type;
  49.     union {
  50.     Net_EtherAddress    ether;
  51.     Net_UltraAddress    ultra;
  52.     Net_FDDIAddress        fddi;
  53.     Net_InetAddress        inet;
  54.     } address;
  55. } Net_Address;
  56.  
  57. /*
  58.  * Maximum number of network protocols.  Right now we support two,
  59.  * raw (ethernet for example) and inet
  60.  */
  61.  
  62. #define NET_MAX_PROTOCOLS 2
  63.  
  64. /*
  65.  * The different protocols.
  66.  */
  67.  
  68. #define NET_PROTO_RAW    0
  69. #define NET_PROTO_INET    1
  70.  
  71.  
  72. /* 
  73.  * This is the version number stored in the route.  Set this before
  74.  * installing a route and check it when looking at one.
  75.  */
  76. #define NET_ROUTE_VERSION 0x70500
  77.  
  78. /*
  79.  * Number of different types of networks. 
  80.  */
  81.  
  82. #define NET_NUM_NETWORK_TYPES 3
  83.  
  84. /*
  85.  * Type of network.  See below.
  86.  */
  87.  
  88. typedef int Net_NetworkType;
  89.  
  90. /*
  91.  * Types of network (values for Net_NetworkType).
  92.  */
  93.  
  94. #define NET_NETWORK_ETHER    ((Net_NetworkType) 0)    /* Ethernet. */
  95. #define NET_NETWORK_ULTRA    ((Net_NetworkType) 1)    /* Ultranet. */
  96. #define NET_NETWORK_FDDI        ((Net_NetworkType) 2)    /* FDDI. */
  97.  
  98. /*
  99.  * This structure defines the packet headers.
  100.  */
  101. typedef union Net_Header {
  102.     Net_EtherHdr    etherHdr;    /* Raw ethernet packet. */
  103.     struct {                /* An IP packet on the ethernet. */
  104.     Net_EtherHdr    etherHdr;
  105.     Net_IPHeader    ipHdr;
  106.     } inetHdr;        
  107. } Net_Header;
  108.  
  109. /*
  110.  * The user-level view of a route. This structure is used to both install
  111.  * routes and to get their contents.  The fields are marked 'in' if they
  112.  * must be set to install a route, and 'out' if they are set when 
  113.  * getting a route's contents.
  114.  */
  115.  
  116. typedef struct Net_UserRoute {
  117.     int            version;    /* Version number. (in/out)*/
  118.     int            spriteID;    /* Sprite ID of route target. (in/out)*/
  119.     Net_Address        interAddress;    /* Address of interface for route. 
  120.                      * (in/out) */
  121.     int            protocol;    /* Route protocol. (in/out) */
  122.     int            flags;        /* Flags. See below. (in/out) */
  123.     int            refCount;    /* Number of references to route. 
  124.                      * (out). */
  125.     int            routeID;    /* Unique route ID. (out)*/
  126.     int            minPacket;    /* Minimum packet size for route. 
  127.                      * This does not include any headers.
  128.                      * (out) */
  129.     int            maxPacket;    /* Maximum packet size for route. 
  130.                      * This does not include any headers.
  131.                      * (out) */
  132.     int            minRpc;        /* Minimum RPC to send over route.
  133.                      * (in/out) */
  134.     int            maxRpc;        /* Maximum RPC to send over route.
  135.                      * (in/out) */
  136.     Net_NetworkType    netType;    /* Type of network. See above. (out) */
  137.     Net_Address        netAddress[NET_MAX_PROTOCOLS];    /* Address of target
  138.                              * for each protocol.
  139.                                (in/out) */
  140.     char        desc[64];    /* Route description for debugging.
  141.                      * (out) */
  142.     char        hostname[20];    /* Host name. (in/out) */
  143.     char        machType[12];    /* Host machine type. (in/out) */
  144.     ClientData        userData;    /* Data that is uninterpreted by 
  145.                      * kernel. (in/out) */
  146. } Net_UserRoute;
  147.  
  148. #ifndef KERNEL
  149. typedef Net_UserRoute Net_Route;    /* User's see this structure as a
  150.                      * Net_Route. */
  151. #endif
  152.  
  153. #ifdef KERNEL
  154. /*
  155.  * These are the backwards compatible versions of Net_RouteInfo. 
  156.  * and Net_Address. Don't use this in new programs. These definitions
  157.  * can be removed once they are no longer used by the kernel.
  158.  */
  159. typedef union Net_AddressOld {
  160.     Net_EtherAddress        ether;
  161.     Net_InetAddress        inet;
  162.     Net_UltraAddress        ultra;
  163.     Net_FDDIAddress        fddi;
  164.     struct { char data[8]; }     generic;
  165. } Net_AddressOld;
  166.  
  167. typedef struct Net_RouteInfoOld {
  168.     int            version;    /* Version number. (in/out)*/
  169.     int            spriteID;    /* Sprite ID of route target. (in/out)*/
  170.     int            interface;    /* The interface number to use. 
  171.                      * (in/out) */
  172.     int            protocol;    /* Route protocol. (in/out) */
  173.     int            flags;        /* Flags. See below. (in/out) */
  174.     int            refCount;    /* Number of references to route. 
  175.                      * (out). */
  176.     int            routeID;    /* Unique route ID. (in/out)*/
  177.     int            maxBytes;    /* Maximum transfer unit for route. 
  178.                      * This does not include any headers.
  179.                      * (out) */
  180.     int            minBytes;    /* Minimum transfer unit for route. 
  181.                      * This does not include any headers.
  182.                      * (out) */
  183.     Net_NetworkType    netType;    /* Type of network. See above. (out) */
  184.     Net_AddressOld    netAddress[NET_MAX_PROTOCOLS];    /* Address of target
  185.                              * for each protocol.
  186.                                (in/out) */
  187.     char        desc[64];    /* Route description for debugging.
  188.                      * (out) */
  189.     char        hostname[20];    /* Host name. (in/out) */
  190.     char        machType[12];    /* Host machine type. (in/out) */
  191.     ClientData        userData;    /* Data that is uninterpreted by 
  192.                      * kernel. (in/out) */
  193.     Net_Header        header;        /* The packet header. (out) */
  194. } Net_RouteInfoOld;
  195.  
  196. #endif
  197. /*
  198.  * Define the flags field.
  199.  */
  200.  
  201. #define NET_FLAGS_VALID 0x1
  202.  
  203. /*
  204.  * Define the special Sprite ID used for broadcasting.
  205.  */
  206. #define        NET_BROADCAST_HOSTID    0
  207.  
  208.  
  209. /* 
  210.  * If we're building a kernel, don't include this declaration.  It 
  211.  * clashes with the declaration for the real kernel routine.
  212.  */
  213.  
  214. #ifndef KERNEL
  215.  
  216. extern ReturnStatus Net_InstallRoute _ARGS_((int spriteID, int flags,
  217.                          int type, ClientData clientData,
  218.                          char *hostname, char
  219.                          *machType));
  220.  
  221. #endif /* KERNEL */
  222.  
  223.  
  224. /*
  225.  * Declarations for -lnet library.
  226.  */
  227.  
  228. extern Net_InetAddress    Net_StringToInetAddr _ARGS_((char *cp));
  229. extern ReturnStatus    Net_StringToAddr _ARGS_((char *buffer, 
  230.                 Net_AddressType type, Net_Address *addressPtr));
  231. extern char        *Net_InetAddrToString _ARGS_((Net_InetAddress address,
  232.                               char *buffer));
  233. extern char        *Net_AddrToString _ARGS_((Net_Address *netAddressPtr,
  234.                         char *buffer));
  235. extern unsigned int    Net_StringToNetNum _ARGS_((char *cp));
  236. extern unsigned int    Net_InetAddrHostNum _ARGS_((Net_InetAddress inetAddr));
  237. extern unsigned int    Net_InetAddrNetNum _ARGS_((Net_InetAddress addr));
  238. extern unsigned int    Net_InetAddrNetMask _ARGS_((Net_InetAddress addr));
  239. extern Net_InetAddress    Net_MakeInetAddr _ARGS_((unsigned int net,
  240.                          unsigned int host));
  241. extern char        *Net_EtherAddrToString _ARGS_((
  242.                 Net_EtherAddress *etherAddrPtr,
  243.                 char buffer[18]));
  244. extern void        Net_StringToEtherAddr _ARGS_((char *buffer,
  245.                        Net_EtherAddress *etherAddressPtr));
  246. extern     char        *Net_UltraAddrToString _ARGS_((
  247.                 Net_UltraAddress *ultraAddrPtr, char *buffer));
  248. extern void        Net_StringToUltraAddr _ARGS_((char *buffer,
  249.                        Net_UltraAddress *ultraAddressPtr));
  250. extern     char        *Net_FDDIAddrToString _ARGS_((
  251.                 Net_FDDIAddress *fddiAddrPtr, char *buffer));
  252. extern void        Net_StringToFDDIAddr _ARGS_((char *buffer,
  253.                        Net_FDDIAddress *fddiAddressPtr));
  254. extern unsigned short    Net_InetChecksum _ARGS_((int len, Address bufPtr));
  255. extern unsigned short    Net_InetChecksum2 _ARGS_((int len, Address bufPtr,
  256.                            Net_IPPseudoHdr *pseudoHdrPtr));
  257. extern int        Net_AddrCmp _ARGS_((Net_Address *aPtr, 
  258.                 Net_Address *bPtr));
  259. extern ReturnStatus    Net_SetAddress _ARGS_((Net_AddressType type,
  260.                 Address specificPtr, Net_Address *addrPtr));
  261. extern ReturnStatus    Net_GetAddress _ARGS_((Net_Address *addrPtr, 
  262.                 Address specificPtr));
  263.  
  264. #if BYTE_ORDER == LITTLE_ENDIAN
  265. extern unsigned int    Net_NetToHostInt _ARGS_((unsigned int longInt));
  266. extern unsigned int    Net_HostToNetInt _ARGS_((unsigned int longInt));
  267.  
  268. extern unsigned short    Net_NetToHostShort _ARGS_((unsigned short shortInt));
  269. extern unsigned short    Net_HostToNetShort _ARGS_((unsigned short shortInt));
  270. #else 
  271. #define Net_NetToHostInt(arg)    (arg)
  272. #define Net_HostToNetInt(arg)    (arg)
  273.  
  274. #define Net_NetToHostShort(arg)    (arg)
  275. #define Net_HostToNetShort(arg)    (arg)
  276. #endif
  277.  
  278. #endif _NET_USER
  279.